package com.ep.general.komunikat;

import com.ep.general.RodzajUzytkownika;
import com.ep.general.admin.Administrator;
import com.ep.general.admin.AdministratorMdt;
import com.ep.general.instruktor.Instruktor;
import com.ep.general.instruktor.InstruktorMdt;
import com.ep.general.komunikat.db.Komunikat;
import com.ep.general.komunikat.db.KomunikatOdbiorca;
import com.ep.general.kursant.Kursant;
import com.ep.general.kursant.KursantMdt;

public class KomunikatView {

	private KomunikatMdt komunikatMdt;
	private KomunikatOdbiorcaMdt komunikatOdbiorcaMdt;

	public String getWyslaneAdministrator(int administratorId) {
		StringBuilder sb = new StringBuilder();
		for (Komunikat item : getKomunikatMdt().getForAdministrator(
				administratorId, StatusKomunikatu.WYSLANY)) {
			String jsonItem = item.getAsJson();
			sb.append(jsonItem);
			sb.append(",");
		}

		if (!(sb.length() == 0)) {
			sb.deleteCharAt(sb.length() - 1);
		}

		return sb.toString();
	}

	public String getOdebraneAdministrator(int administratorId) {
		StringBuilder sb = new StringBuilder();
		for (KomunikatOdbiorca item : getKomunikatOdbiorcaMdt()
				.getOdebraneAdministrator(administratorId)) {
			item.getKomunikat().setAutorNazwa(
					prepareAutorNazwa(item.getKomunikat()));
			String jsonItem = item.getKomunikat().getAsJson();
			sb.append(jsonItem);
			sb.append(",");
		}

		if (!(sb.length() == 0)) {
			sb.deleteCharAt(sb.length() - 1);
		}

		return sb.toString();
	}

	public String getWyslaneInstruktor(int instruktorId) {
		StringBuilder sb = new StringBuilder();
		for (Komunikat item : getKomunikatMdt().getForInstruktor(instruktorId,
				StatusKomunikatu.WYSLANY)) {
			String jsonItem = item.getAsJson();
			sb.append(jsonItem);
			sb.append(",");
		}

		if (!(sb.length() == 0)) {
			sb.deleteCharAt(sb.length() - 1);
		}

		return sb.toString();
	}

	public String getOdebraneInstruktor(int instruktorId) {
		StringBuilder sb = new StringBuilder();
		for (KomunikatOdbiorca item : getKomunikatOdbiorcaMdt()
				.getOdebraneInstruktor(instruktorId)) {
			item.getKomunikat().setAutorNazwa(
					prepareAutorNazwa(item.getKomunikat()));
			String jsonItem = item.getKomunikat().getAsJson();
			sb.append(jsonItem);
			sb.append(",");
		}

		if (!(sb.length() == 0)) {
			sb.deleteCharAt(sb.length() - 1);
		}

		return sb.toString();
	}

	public String getWyslaneKursant(int kursantId) {
		StringBuilder sb = new StringBuilder();
		for (Komunikat item : getKomunikatMdt().getForKursant(kursantId,
				StatusKomunikatu.WYSLANY)) {
			String jsonItem = item.getAsJson();
			sb.append(jsonItem);
			sb.append(",");
		}

		if (!(sb.length() == 0)) {
			sb.deleteCharAt(sb.length() - 1);
		}

		return sb.toString();
	}

	public String getOdebraneKursant(int kursantId) {
		StringBuilder sb = new StringBuilder();
		for (KomunikatOdbiorca item : getKomunikatOdbiorcaMdt()
				.getOdebraneKursant(kursantId)) {
			item.getKomunikat().setAutorNazwa(
					prepareAutorNazwa(item.getKomunikat()));
			String jsonItem = item.getKomunikat().getAsJson();
			sb.append(jsonItem);
			sb.append(",");
		}

		if (!(sb.length() == 0)) {
			sb.deleteCharAt(sb.length() - 1);
		}

		return sb.toString();
	}

	private String prepareAutorNazwa(Komunikat komunikat) {
		RodzajUzytkownika rodzajAutora = komunikat.getRodzajAutora();
		int autorId = komunikat.getAutorId();

		if (rodzajAutora == RodzajUzytkownika.ADMINISTRATOR) {
			Administrator item = new AdministratorMdt().get(autorId);
			return "Administrator: " + item.getImie() + " "
					+ item.getNazwisko();
		} else if (rodzajAutora == RodzajUzytkownika.INSTRUKTOR) {
			Instruktor item = new InstruktorMdt().get(autorId);
			return "Instruktor: " + item.getImie() + " " + item.getNazwisko();
		} else if (rodzajAutora == RodzajUzytkownika.KURSANT) {
			Kursant item = new KursantMdt().get(autorId);
			return "Kursant: " + item.getImie() + " " + item.getNazwisko();
		}
		return "Nieznany";
	}

	private KomunikatOdbiorcaMdt getKomunikatOdbiorcaMdt() {
		if (komunikatOdbiorcaMdt == null)
			komunikatOdbiorcaMdt = new KomunikatOdbiorcaMdt();
		return komunikatOdbiorcaMdt;
	}

	private KomunikatMdt getKomunikatMdt() {
		if (komunikatMdt == null)
			komunikatMdt = new KomunikatMdt();
		return komunikatMdt;
	}

}
